Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / build-logic / convention / src / main / kotlin / AndroidScreenshotConventionPlugin.kt

Displaying Raw • Download

build-logic/convention/src/main/kotlin/AndroidScreenshotConventionPlugin.kt bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 3.31 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72import T7ee787com.android.build.api.dsl.LibraryExtension
Tff7b72import T7ee787com.gradle.develocity.agent.gradle.test.DevelocityTestConfiguration
Tff7b72import T7ee787org.gradle.api.Plugin
Tff7b72import T7ee787org.gradle.api.Project
Tff7b72import T7ee787org.gradle.api.tasks.testing.Test
Tff7b72import T7ee787org.gradle.kotlin.dsl.configure
Tff7b72import T7ee787org.gradle.kotlin.dsl.withType
Tff7b72import T7ee787org.meshtastic.buildlogic.library
Tff7b72import T7ee787org.meshtastic.buildlogic.libs

T8b949e/**
* Convention for Compose Screenshot Testing modules (`:screenshot-tests`, `:docs-screenshots`).
*
* Owns the shared CST configuration: the `enableScreenshotTest` experimental flag, the test-retry opt-out (CST's custom
* runner is incompatible with test retry), and the Compose Multiplatform + screenshot-validation dependencies.
* Configuration-only: apply it ALONGSIDE `meshtastic.android.library[.compose]` and `com.android.compose.screenshot`,
* which the module declares itself. The `screenshotTests { imageDifferenceThreshold }` block stays in the module
* scripts — it is a DSL extension of the screenshot plugin, reachable there via generated accessors only.
*/
Tff7b72class T56d364AndroidScreenshotConventionPlugin Tb4b4b4: Te6edf3PluginTff7b72<Te6edf3ProjectTff7b72> Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffapplyTb4b4b4(Te6edf3targetTb4b4b4: Te6edf3ProjectTb4b4b4) Tb4b4b4{
Te6edf3withTb4b4b4(Te6edf3targetTb4b4b4) Tb4b4b4{
Te6edf3pluginManagerTb4b4b4.Te6edf3withPluginTb4b4b4(Ta5d6ff"Ta5d6ffcom.android.compose.screenshotTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3extensionsTb4b4b4.Te6edf3configureTff7b72<Te6edf3LibraryExtensionTff7b72> Tb4b4b4{
Te6edf3experimentalPropertiesTff7b72[Ta5d6ff"Ta5d6ffandroid.experimental.enableScreenshotTestTa5d6ff"Tff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// CST screenshot tests use a custom runner incompatible with test retry
Te6edf3tasksTb4b4b4.Te6edf3withTypeTff7b72<Te6edf3TestTff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3configureEach Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffScreenshotTestTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3extensionsTb4b4b4.Te6edf3findByTypeTb4b4b4(Te6edf3DevelocityTestConfigurationTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4)Tff7b72?.Te6edf3testRetry Tb4b4b4{
Te6edf3maxRetriesTb4b4b4.Te6edf3setTb4b4b4(T79c0ff0Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3dependenciesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffimplementationTa5d6ff"Tb4b4b4, Te6edf3libsTb4b4b4.Te6edf3libraryTb4b4b4(Ta5d6ff"Ta5d6ffcompose-multiplatform-foundationTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3dependenciesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffimplementationTa5d6ff"Tb4b4b4, Te6edf3libsTb4b4b4.Te6edf3libraryTb4b4b4(Ta5d6ff"Ta5d6ffcompose-multiplatform-material3Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3dependenciesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffimplementationTa5d6ff"Tb4b4b4, Te6edf3libsTb4b4b4.Te6edf3libraryTb4b4b4(Ta5d6ff"Ta5d6ffcompose-multiplatform-runtimeTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3dependenciesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffimplementationTa5d6ff"Tb4b4b4, Te6edf3libsTb4b4b4.Te6edf3libraryTb4b4b4(Ta5d6ff"Ta5d6ffcompose-multiplatform-uiTa5d6ff"Tb4b4b4)Tb4b4b4)

T8b949e// Added lazily: AGP creates the screenshotTest configurations after plugin apply.
Te6edf3configurations
Tb4b4b4.Te6edf3matching Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3name Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffscreenshotTestImplementationTa5d6ff" Tb4b4b4}
Tb4b4b4.Te6edf3configureEach Tb4b4b4{ Te6edf3projectTb4b4b4.Te6edf3dependenciesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3libsTb4b4b4.Te6edf3libraryTb4b4b4(Ta5d6ff"Ta5d6ffscreenshot-validation-apiTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.04s